package com.lry.basic.algorithm.stack;

import java.util.Stack;

/**
 * @author:刘仁有
 * @desc:
 * @email:953506233@qq.com
 * @data:2019/12/3
 */
//根据每日 气温 列表，请重新生成一个列表，对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。
//        如果之后都不会升高，请在该位置用 0 来代替。
//例如，给定一个列表 temperatures = [73, 74, 75, 71, 69, 80, 76, 73]，
//        你的输出应该是 [1, 1, 3, 2, 1, 0, 0, 0]。
//提示：气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度，都是在 [30, 100] 范围内的整数。
public class DailyTemperatures {
    public static void main(String[] args) {
        int[]res = DailyTemperatures.dailyTemperatures(new int[]{73,74,75,71,69,72,76,73});
        for (int i:res) {
            System.out.print(i+" ");
        }
    }

    public static int[] dailyTemperatures2(int[] arr) {
        if(null==arr){
            return null;
        }
        int[] res = new int[arr.length];
        //存储小标
        Stack<Integer>stack = new Stack<>();
        for(int i=arr.length-1;i>=0;i--){
            //弹出所有比当前元素小的元素的下标
            while(!stack.isEmpty()&&arr[i]>=arr[stack.peek()]){
                stack.pop();
            }
            res[i] = stack.isEmpty()?0:stack.peek()-i;
            stack.push(i);
        }
        return res;
    }

    public static int[] dailyTemperatures(int[] arr) {
        if(null==arr){
            return null;
        }
        int[] res = new int[arr.length];
        for(int i=0;i<arr.length;i++){
            //往后找到第一个大于arr[i]的元素
            for(int j=i+1;j<arr.length;j++){
                if(arr[j]>arr[i]){
                    res[i] = j-i;
                    break;
                }
            }
        }
        return res;
    }
}
